#define  _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;

//class A {
//public: void test(float a)
//{
//	cout << a;
//}
//};
//class B :public A
//{
//public: void test(int b)
//{
//	cout << b;
//}
//};
//void main()
//{
//	A* a = new A;
//	B* b = new B;
//	a = b; a->test(1.1);
//}

//class A
//{
//public:
//	virtual void f()
//	{
//		cout << "A::f()" << endl;
//	}
//};
//
//
//
//class B : public A
//{
//private:
//	virtual void f()
//	{
//		cout << "B::f()" << endl;
//	}
//};
//
//
//
//int main()
//{
//	A* pa = (A*)new B;
//
//	pa->f();
//}

class A
{
public:

  A() :m_iVal(0) { test(); }

  virtual void func() { std::cout << m_iVal << " "; }

  void test() { func(); }

public:

  int m_iVal;

};



class B : public A

{

public:

    B() { test(); }

    virtual void func()

    {

        ++m_iVal;

        std::cout << m_iVal << " ";

    }

};



int main(int argc, char* argv[])

{

    A* p = new B;

    p->test();

    return 0;

}